package com.excellent.user.pojo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Pattern;
import java.util.Date;

/**
 * 为了安全考虑。
 * 这里对 password 和 salt 添加了注解 @JsonIgnore，这样在 json 序列化时，就不会把 password 和 salt 返回。
 *
 * 在用户注册之前会进行校验，这里使用 hibernare-validator 进行校验
 * @author Xxacker
 */
@Data
@Table(name = "tb_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Length(min = 4, max = 30, message = "用户名必须在4-30位之间")
    private String username;    // 用户名

    @JsonIgnore
    @Length(min = 4, max = 30, message = "密码必须在4-30位之间")
    private String password;    // 密码

    @Pattern(regexp = "^1[356789]\\d{9}$", message = "手机号不合法")    // 指定正则表达式，对手机号进行校验
    private String phone;       // 电话

    private Date created;       // 创建时间

    @JsonIgnore
    private String salt;        // 密码的盐值

}
